home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 1 / Cream of the Crop 1.iso / PROGRAM / AVDOOR11.ARJ / AVDOOR.DOC next >
Text File  |  1991-12-10  |  30KB  |  755 lines

  1.   AVDOOR - Avatar's Generic Door Toolkit
  2.   Created 3/12/90 by Avatar
  3.   Sysop of S.I.G. BBS +61 3 888-8846
  4.   Copyright (c) 1991 Serious Cybernetics
  5. | Version 1.10 documentation
  6. | Last updated 10/12/91 by Avatar
  7.  
  8. | Lines marked with a vertical bar "|" in the left margin have been updated
  9. | since the previous version.  If you have any comments or suggestions,
  10. | please contact me as Avatar on S.I.G. BBS +61 3 888-8846 or via netmail at
  11. | 199:4242/1@RainbowNet, 3:632/358@FidoNet or 58:4100/32@INTLnet.  You can
  12.   also reach me as avatar@csource.oz.au on the Internet or by mail at:
  13.  
  14.   Serious Cybernetics
  15.   P.O. Box 409
  16.   Canterbury 3126
  17.   Australia
  18.  
  19.  
  20.  
  21.   Introduction
  22.   ------------
  23.  
  24. | AvDoor evolved from another program of mine called AIchat, and later
  25. | closed the circle by being used to implement further releases of that
  26. | program.  However, I needed to write a number of other online programs,
  27. | and thus AvDoor was born.  Pretty soon people were asking me if they
  28. | could use my routines and I decided to release this unit as shareware.
  29.  
  30.   AvDoor provides most of the underlying infrastructure needed by almost
  31.   every online program, including:
  32.  
  33.   * FOSSIL detection (but will work without one)
  34.   * ANSI emulation (doesn't need ANSI.SYS installed!)
  35.   * Local console screen I/O and status line (using only BIOS calls)
  36.   * Built-in chat mode with word-wrap and logging (and optional shell-to-DOS)
  37.   * BBS interfaces, command-line mode and local operation
  38.   * Timeout, time used and hangup detection (very important!)
  39.   * Software registration keys (with registered copies of AvDoor only)
  40.  
  41.  
  42.  
  43.   Legal Notice
  44.   ------------
  45.  
  46.   This program is Shareware.  You may distribute it as widely as you wish.
  47.   You may not modify AVDOOR55.TPU, AVDOOR60.TPU or this file AVDOOR.DOC in
  48.   any way, nor may you omit any of them.  You may not include any other
  49.   files as part of the AvDoor distribution package, and you may not charge
  50.   more than a fair and reasonable copying fee.  If you continue using this
  51.   program on an ongoing basis after having tested it, you must send $25
  52.   (A$30 or equivalent in foreign currency if outside Australia) or more to
  53.   the address at the end of this documentation with your name and
  54.   (optionally) the business name you would like AvDoor registered to.
  55.  
  56.   You will receive a disk containing the latest version of the program
  57.   registered in your name and a selection of other Freeware and Shareware
  58.   software from Serious Cybernetics.  Please specify the size and shape of
  59.   disk you require when ordering.  No warranty of any kind is expressed or
  60.   implied, and the author will not be held liable for any damages,
  61.   consequential or otherwise, caused by the use, misuse or abuse of this
  62.   program.  We told you the rules, now don't forget them!  Failure to
  63.   abide by these terms constitutes a breach of copyright law.  Nyaah!
  64.  
  65.  
  66.  
  67.   Installation
  68.   ------------
  69.  
  70.   You will need to rename AVDOOR55.TPU to AVDOOR.TPU if you are using
  71.   Turbo Pascal 5.5, or rename AVDOOR60.TPU to AVDOOR.TPU if you are
  72.   using Turbo Pascal 6.0.  If you are using any other programming
  73.   language, please contact me to find out if a version of AvDoor to suit
  74. | you is planned.  Source code for parts of AvDoor may be available in
  75. | later releases if requested - contact the author for pricing.
  76.  
  77.  
  78.  
  79.   Contents
  80.   --------
  81.  
  82. | This manual is gradually being expanded with every release of AvDoor.
  83. | At present it consists of the following information:  A summary of the
  84. | types, constants and variables (in that order) defined by AvDoor, an
  85. | explanation of the ShellProc variable with a sample DosShell function,
  86. | a brief summary of the functions and procedures provided by AvDoor, a
  87. | longer explanation of each of the procedures and functions, and a
  88. | (very simple!) sample program.  Hopefully that should be enough to get
  89. | you started, but if you have any further questions feel free to
  90. | contact me by any of the means listed at the beginning of this
  91. | documentation.  Priority will obviously be given to registered users.
  92.  
  93.  
  94.  
  95.   Types
  96.   -----
  97.  
  98. | Effects     = (Normal, Highlight, Underline, Blink, Reverse, Hidden);
  99.  
  100. | CurrencyFmt = (Before, After, BeforeSp, AfterSp, DecimalPlace);
  101. | DateFmt     = (MDY, DMY, YMD);
  102. | TimeFmt     = (Time12, Time24);
  103.  
  104.  
  105.  
  106.   Constants
  107.   ---------
  108.  
  109. | DoorVers = '1.10';           Current version of AvDoor
  110.  
  111. | Black  = 0;  DkGrey   = 8;   BlackBg  = 0;
  112. | Blue   = 1;  LtBlue   = 9;   BlueBg   = 16;
  113. | Green  = 2;  LtGreen  = 10;  GreenBg  = 32;
  114. | Cyan   = 3;  LtCyan   = 11;  CyanBg   = 48;
  115. | Red    = 4;  LtRed    = 12;  RedBg    = 64;
  116. | Purple = 5;  LtPurple = 13;  PurpleBg = 80;
  117. | Brown  = 6;  Yellow   = 14;  BrownBg  = 96;
  118. | LtGrey = 7;  White    = 15;  GreyBg   = 112;
  119.  
  120. | Bright   = 8;
  121. | Blinking = 128;
  122.  
  123.   MsgColour = White;           Colour of system messages
  124.   SysColour = Yellow;          Colour of Sysop's text
  125.   UsrColour = Cyan;            Colour of User's text
  126.   MorColour = Purple;          Colour of [ENTER] message
  127.   ErrColour = LtRed;           Colour of error messages
  128. | FldColour = LtGrey + BlueBg; Colour of string input fields
  129.  
  130.   Zero = Ord('0');             ASCII code for '0'
  131.   Etx  = #3;                   ASCII code for End of Text (^C)
  132.   Esc  = #27;                  ASCII code for Escape
  133.   Del  = #127;                 ASCII code for Delete
  134.  
  135.  
  136.  
  137.   Variables
  138.   ---------
  139.  
  140.   ShellProc:      Function(Command: String): Integer;
  141.  
  142. | Option:         Array['A'..'Z'] of String[40];
  143. | Options:        Set of 'A'..'Z';
  144.  
  145.   EXEpath:        String;      Path of .EXE file (if >= DOS 3.0)
  146.   Desqview:       Word;        Desqview version number or zero
  147. | Process:        Byte;        Current process number (0 = single-tasking)
  148.  
  149. | DateFormat:     DateFmt;     Format of dates in current country
  150. | Currency:       String[4];   Currency symbol in current country
  151. | Thousand:       Char;        Thousand separator in current country
  152. | Decimal:        Char;        Decimal point or comma in current country
  153. | DateSep:        Char;        Date separator in current country
  154. | TimeSep:        Char;        Time separator in current country
  155. | CurrencyFormat: CurrencyFmt; Currency symbol format in current country
  156. | CurrencyPlaces: Byte;        Currency decimal places in current country
  157. | TimeFormat:     TimeFmt;     Time format in current country
  158. | ListSep:        Char;        List separator in current country
  159.  
  160.   Author:         String[60];  Name & details of author
  161.   ProgDesc:       String[60];  Brief description of program
  162.   Written:        String[9];   Date program was written
  163.   Version:        String[4];   Current version number of program
  164.  
  165.   Baud:           String;      Baud rate (0 = local)
  166. | Port:           Byte;        Port number minus 1
  167.  
  168. | Lines:          Byte;        Number of lines on remote screen
  169.  
  170.   Username:       String;      Full username or 'UNKNOWN'
  171.   FirstName:      String;      User's first name ('' if unknown)
  172.   BBSName:        String;      Name of BBS ('' if unknown)
  173.   SysopName:      String;      Name of Sysop ('' if unknown)
  174.  
  175.   Graphics:       Boolean;     True if ANSI supported
  176.   Online:         Boolean;     True if user has not hung up or timed out
  177.   Fossil:         Boolean;     True if a FOSSIL is in use
  178.   WordWrap:       Boolean;     True if AvDoor is performing word wrapping
  179.   Registered:     Boolean;     True if program is registered
  180.  
  181.   KeyCh:          Byte;        Scan code of local key pressed
  182.  
  183.   MaxTime:        Byte;        Maximum time permitted in program (minutes)
  184.   TimeLeft:       LongInt;     Time left in program (seconds)
  185.  
  186.  
  187.   Functions and Procedures
  188.   ------------------------
  189.  
  190. | function  UpCase(Ch: Char): Char;      Convert character to uppercase
  191. | function  LoCase(Ch: Char): Char;      Convert character to lowercase
  192.   function  Upper(S: String): String;    Convert string to uppercase
  193.   function  Lower(S: String): String;    Convert string to lowercase
  194.   function  Mixed(S: String): String;    Convert string to mixed case
  195.   function  RepChr(Ch: Char; N: Byte): String;
  196.                                          Create string of repeated chars
  197.  
  198.   function  Time: LongInt;               Current time (seconds past midnight)
  199. | function  DateStamp: String;           Current time and date string
  200.  
  201.   procedure StatLine;                    Display status line
  202.   procedure UndoStat;                    Remove status line
  203.   procedure Update;                      Update time display on status line
  204.  
  205. | procedure Beep;                        Ring user's console bell
  206. | procedure Newline;                     Perform CRLF
  207.   procedure PutCh(Ch: Char);             Output a character
  208.   procedure Put(S: String);              Output a string
  209.   procedure PutLn(S: String);            Output a string with CRLF
  210.   procedure PutTab(C: Byte);             Move cursor to specified column
  211.   procedure PutNum(N: Longint; W: Byte); Output a number right-justified
  212. | procedure PutMenu(Ch: Char);           Output a menu choice
  213.   procedure PutANSI(Ch: Char);           Output a character with ANSI       *
  214.   procedure ClrEol;                      Clear to end of line               *
  215.   procedure ClrScr;                      Clear entire screen
  216.   procedure GotoXY(X, Y: Byte);          Move cursor to (X,Y)               *
  217.  
  218.   function  GotCh: Boolean;              True if character ready
  219.   function  RawCh: Char;                 Input raw character
  220.   function  GetCh: Char;                 Input a character
  221.   function  WaitCh(csecs: Word): Char;   Input a character with timeout
  222.   function  Fetch(Valid: String): Char;  Input a character with validation
  223. | function  GetField(Mask: String): String;
  224. |                                        Input a string field with mask
  225.  
  226.   procedure Flush;                       Flush input buffers
  227.   procedure Purge;                       Purge output buffers
  228.  
  229.   procedure Pause;                       Display [ENTER] and wait for key
  230.   procedure Delay(csecs: Word);          Delay a number of centiseconds
  231. | procedure Colour(C: Byte);             Change colour                      *
  232. | procedure Effect(E: Effects);          Select display effects             *
  233.   procedure Error(Msg: String);          Display error message on console
  234.  
  235.   procedure Initialise(PN: String);      Initialise AvDoor
  236.  
  237.   NOTE: The procedures marked with an asterisk "*" above require ANSI
  238.   graphics to be enabled (indicated by Graphics = TRUE).  PutANSI and
  239. | GotoXY will still send the ANSI characters and operate correctly on the
  240. | local console, but the remote user will get meaningless junk.  ClrEol,
  241. | Colour and Effect will NOT send any characters to the remote user if ANSI
  242. | graphics is disabled (Graphics = FALSE).  Colour will also set the local
  243. | colour to light grey on black to simulate what the remote user is seeing.
  244.  
  245.  
  246.  
  247. | The ShellProc variable
  248.   ----------------------
  249.  
  250. | This variable contains the address of a function which will attempt to
  251. | shell to DOS and execute a given command.  By default, ShellProc
  252. | contains the address of a function which will immediately return -8 as
  253. | an error code.  An example function using the Turbo Pascal DOS unit:
  254.  
  255. |   (* Set 8K stack and 10K heap to leave room for shell *)
  256. |   {$M 8192, 0, 10240}
  257.  
  258. |   uses Dos;
  259.  
  260. |   {$F+}  (* Function must be defined as FAR! *)
  261. |   function DosShell(Command: String): Integer;
  262.  
  263.     begin
  264. |     SwapVectors;
  265. |     if Command = '' then
  266. |       Exec(GetEnv('COMSPEC'), '')
  267. |     else
  268. |       Exec(GetEnv('COMSPEC'), '/C ' + Command);
  269. |     SwapVectors;
  270. |     DosShell := DosError;
  271.     end;
  272. |   {$F-}
  273.  
  274. | You can then assign ShellProc := DosShell to enable the Alt-J (shell to
  275. | DOS) key in AvDoor.
  276.  
  277.  
  278.  
  279.   String functions
  280.   ----------------
  281.  
  282. | function UpCase(Ch: Char): Char;
  283.  
  284. |   This function will convert any lowercase letters (including accented
  285. |   letters in the IBM graphic character set) into the corresponding
  286. |   uppercase letters.  Any other characters will be returned unmodified.
  287.  
  288.  
  289. | function LoCase(Ch: Char): Char;
  290.  
  291. |   This function will convert any uppercase letters (including accented
  292. |   letters in the IBM graphic character set) into the corresponding
  293. |   lowercase letters.  Any other characters will be returned unmodified.
  294.  
  295.  
  296.   function Upper(S: String): String;
  297.  
  298. |   This function will convert any lowercase letters in the string S
  299. |   (including accented letters in the IBM graphic character set) into the
  300. |   corresponding uppercase letters.  It will also change any underscores
  301. |   '_' into spaces.  All other characters in the string S will be returned
  302.     unmodified.
  303.  
  304.  
  305.   function Lower(S: String): String;
  306.  
  307.     This function will convert any uppercase letters in the string S
  308. |   (including accented letters in the IBM graphic character set) into the
  309. |   corresponding lowercase letters.  All other characters in the string S
  310. |   will be returned unmodified.
  311.  
  312.  
  313.   function Mixed(S: String): String;
  314.  
  315.     This function will convert any uppercase letters in the string S
  316. |   (including accented letters in the IBM graphic character set) into the
  317. |   corresponding lowercase letters.  The first letter of each word,
  318. |   however, and the first letter following the 'c' in any word starting
  319. |   with either 'Mc' or 'Mac', will be converted to uppercase.  A word is
  320. |   defined as any sequence of alphanumeric characters.
  321.  
  322.  
  323.   function RepChr(Ch: Char; N: Byte): String;
  324.  
  325.     This function will return a string consisting of N repetitions of the
  326.     character Ch.
  327.  
  328.  
  329.  
  330. | Time and date functions
  331.   -----------------------
  332.  
  333.   function Time: LongInt;
  334.  
  335.     This function will return the current system time in seconds past
  336.     midnight.  Accuracy is to the nearest BIOS timer tick.
  337.  
  338.  
  339. | function DateStamp: String;
  340.  
  341. |   This function will return the current system time, day of the week and
  342. |   date as a string formatted correctly for the current country.  Note
  343. |   that the day of the week is always in English in the current release.
  344.  
  345.  
  346.  
  347.   Status Line procedures
  348.   ----------------------
  349.  
  350.   procedure StatLine;
  351.  
  352.     This procedure clears the status line (the bottom line of the local
  353.     console) to black text on light grey, and displays (from left to
  354.     right) the name and version number (if any) of the current program,
  355.     the current baud rate or 'LOCAL', the current user's full name, 'LOG'
  356.     if a chat is currently being logged, and the amount of time the user
  357.     has remaining in this program or '[CHATTING]' if in chat mode.
  358.  
  359.  
  360.   procedure UndoStat;
  361.  
  362.     This procedure clears the status line to black spaces, thus erasing it.
  363.  
  364.  
  365.   procedure Update;
  366.  
  367. |   This procedure updates the amount of time remaining, displayed on the
  368. |   right hand side of the status line, and should therefore be called
  369. |   occasionally during lengthy operations without user input (it is
  370. |   automatically called while waiting for a keystroke).  This procedure
  371. |   should never be called before StatLine or after UndoStat, so you should
  372. |   also never request user input before calling StatLine or after calling
  373. |   UndoStat.  If called more often than once a second while running under
  374. |   DesqView, it will relinquish excess time slices to increase efficiency.
  375.  
  376.  
  377.  
  378.   Output procedures
  379.   -----------------
  380.  
  381.   procedure Beep;
  382.  
  383. |   This procedure will ring the bell on the remote console.  It will not
  384. |   ring the local console bell unless the current user is logged on
  385. |   locally (indicated by Baud = 0), or the last key pressed on the local
  386. |   console was G (indicated by KeyCh = 34, since the scan code for the G
  387. |   key will be returned irrespective of the Shift, Control and Alt keys).
  388.  
  389.  
  390. | procedure Newline;
  391.  
  392. |   This procedure will output a carriage return and linefeed (^M and ^J).
  393.  
  394.  
  395.   procedure PutCh(Ch: Char);
  396.  
  397.     This procedure will output the character Ch to the local console and
  398.     (if a remote user is online) to the remote console and (if logging) to
  399.     a disk file.  Word-wrapping will be performed if the global variable
  400.     Wordwrap is True.  The following characters will be handled specially:
  401.  
  402. |   ^G (control-G or bell) will call Beep as above.
  403.  
  404.     ^H (control-H or backspace) will move the cursor left one column if it
  405.     is not already at the left margin.
  406.  
  407.     ^I (control-I or tab) will move the cursor right to the next column
  408.     which is a multiple of eight; if the cursor is already past the last
  409. |   such column, it will perform a Newline instead.
  410.  
  411.     ^J (control-J or linefeed) will move the cursor down one line, or
  412.     scroll the entire screen up one line if already on the last line.
  413.  
  414.     ^K (control-K or reverse linefeed) will move the cursor up one line if
  415. |   not already on the top line and if ANSI graphics are available.
  416.  
  417. |   ^L (control-L or formfeed) will reset the colour to light grey on
  418. |   black, clear the entire screen, and home the cursor to the top left
  419. |   corner.
  420.  
  421.     ^M (control-M or return) will move the cursor to the left margin of
  422.     the current line.
  423.  
  424.     ^N (control-N or home) will home the cursor to the top left corner of
  425.     the screen if ANSI graphics are available.
  426.  
  427. |   ^U (control-U) will move the cursor right one column if it is not
  428. |   already at the rightmost column.  This will work regardless of whether
  429. |   ANSI graphics are available.
  430.  
  431.     ^X (control-X or cancel) will clear the current line and return the
  432.     cursor to the left margin.
  433.  
  434. |   Del (character 127) will move the cursor to the left one column if it
  435. |   is not already at the left margin, erasing the character now under the
  436. |   cursor.
  437.  
  438.  
  439.   procedure Put(S: String);
  440.  
  441.     This procedure will output the string S using the PutCh procedure.
  442.  
  443.  
  444.   procedure PutLn(S: String);
  445.  
  446.     This procedure will output the string S using the PutCh procedure
  447. |   followed by a Newline.
  448.  
  449.  
  450.   procedure PutTab(C: Byte);
  451.  
  452.     This procedure will move the cursor to column C on the current line,
  453.     whether or not ANSI graphics are available.
  454.  
  455.  
  456.   procedure PutNum(N: Longint; W: Byte);
  457.  
  458.     This procedure will output the numeric variable N (of any scalar type
  459. |   including Longint, Integer, Word, and Byte) right-padded with spaces to
  460. |   a width of W characters using the PutCh procedure.  If the value of N
  461. |   (including a minus sign if necessary) will not fit into W characters, a
  462. |   row of asterisks will be output instead.  If W is zero, the value of N
  463. |   will be output regardless of size and without any padding.
  464.  
  465.  
  466. | procedure PutMenu(Ch: Char);
  467.  
  468. |   This procedure will output two spaces and a left square bracket "[" in
  469. |   light grey, the character Ch in yellow (or light grey if ANSI graphics
  470. |   are not available), and a right square bracket "]" and a space in light
  471. |   grey.  This is intended to standardise the way menu choices are
  472. |   presented to users in programs written with AvDoor.
  473.  
  474.  
  475.   procedure PutANSI(Ch: Char);
  476.  
  477.     This procedure will output the character Ch using the PutCh procedure,
  478.     but interpreting any of the following ANSI X.364 escape sequences:
  479.  
  480.     Esc [ A           will move the cursor up one line
  481.     Esc [ <n> A       will move the cursor up <n> lines
  482.     Esc [ B           will move the cursor down one line
  483.     Esc [ <n> B       will move the cursor down <n> lines
  484.     Esc [ C           will move the cursor right one column
  485.     Esc [ <n> C       will move the cursor right <n> columns
  486.     Esc [ D           will move the cursor left one column
  487.     Esc [ <n> D       will move the cursor left <n> columns
  488.     Esc [ H or
  489.     Esc [ f           will home the cursor (like ^N)
  490.     Esc [ <n> H or
  491.     Esc [ <n> f       will move the cursor to row <n> - 1
  492.     Esc [ ; <n> H or
  493.     Esc [ ; <n> f     will move the cursor to column <n> - 1 on the top row
  494.     Esc [ <r> ; <c> H or
  495.     Esc [ <r> ; <c> f will move the cursor to row <r> - 1 and column <c> - 1
  496.     Esc [ J or
  497.     Esc [ <n> J       will clear the screen (like ^L)
  498.     Esc [ K or
  499.     Esc [ <n> K       will clear to the end of the current row
  500.     Esc [ <n>... m    will change the current colour as follows:
  501.        0 = light grey on black
  502.        1 = bright foreground
  503.        2 = dim foreground
  504.        3 = blue foreground (italics on some terminals)
  505.        4 = blue foreground (underlined on some monochrome displays)
  506.        5 = blinking
  507.        6 = blinking (fast blinking on some terminals)
  508.        7 = black on light grey (reversed)
  509.        8 = black on black (hidden)
  510.       30 = black or dark grey foreground
  511.       31 = red foreground
  512.       32 = green foreground
  513.       33 = yellow or brown foreground
  514.       34 = blue foreground
  515.       35 = purple foreground
  516.       36 = cyan foreground
  517.       37 = white or light grey foreground
  518.       40 = black background
  519.       41 = red background
  520.       42 = green background
  521.       43 = brown background
  522.       44 = blue background
  523.       45 = purple background
  524.       46 = cyan background
  525.       47 = light grey background
  526.     Esc [ s           will save the current cursor position
  527.     Esc [ u           will restore the saved cursor position
  528.  
  529.  
  530.   procedure ClrEol;
  531.  
  532.     This procedure will clear to the end of the current row (like Esc [ K)
  533.  
  534.  
  535.   procedure ClrScr;
  536.  
  537. |   This procedure will set the colour to light grey and clear the entire
  538. |   screen (like ^L or Esc [ J)
  539.  
  540.  
  541.   procedure GotoXY(X, Y: Byte);
  542.  
  543.     This procedure will move the cursor to row Y column X, numbered from
  544.     zero (unlike the ANSI X.364 numbering which starts from one).
  545.     This procedure should NOT be called if ANSI graphics is not available
  546.     since it will still send the ANSI escape sequences anyway!
  547.  
  548.  
  549.  
  550.   Input functions and procedures
  551.   ------------------------------
  552.  
  553.   function GotCh: Boolean;
  554.  
  555.     This function will return True if a character is ready for input.
  556.  
  557.  
  558.   function RawCh: Char;
  559.  
  560.     This function will wait for a character to be input, calling Update
  561.     regularly to keep the timer on the status line ticking.  It will also
  562.     check for time up, timeout (no response after two minutes) and carrier
  563. |   loss.  If there is no response after one minute it will output a Beep
  564. |   to warn the user that they only have one more minute to respond before
  565. |   being logged off.  This timeout checking will not occur during chat
  566. |   mode.  KeyCh will be set to the scan code of the key pressed, AltPad if
  567. |   the Alt-numeric keypad was used, or zero if the keystroke came from a
  568. |   remote console.  If a ^R character is received from a remote
  569. |   console, the entire screen is immediately retransmitted.
  570.  
  571.  
  572.   function GetCh: Char;
  573.  
  574.     This function will call RawCh and process incoming characters by
  575. |   converting ^H into Del characters, converting ANSI X.364/VT100/VT52
  576. |   cursor sequences into control characters, moving the cursor
  577. |   immediately after the last printable character on the current line
  578. |   if the "End" key or ^O was pressed, echoing printable characters in
  579. |   the appropriate colour, echoing received carriage returns (^M) as
  580. |   newlines (^M plus ^J) and handling local Sysop commands as follows:
  581.  
  582.     Alt-C will enter chat mode (suspending the timer)
  583.     Alt-G will send a random string of garbage (fake line noise)
  584.     Alt-J will shell to DOS (if implemented in your program)
  585.     Alt-L will toggle logging if in chat mode
  586.     PgUp  will increase the user's time left by one minute (max. 59)
  587.     PgDn  will decrease the user's time left by one minute (min. 1)
  588.  
  589.  
  590.   function WaitCh(csecs: Word): Char;
  591.  
  592.     This function will wait up to csecs centi-seconds (hundredths of a
  593.     second) for an input character, calling Update regularly to keep the
  594.     timer on the status line ticking.  If a character is ready before the
  595.     delay is over it will be input using the GetCh function, otherwise
  596.     character zero will be returned.
  597.  
  598.  
  599.   function Fetch(Valid: String): Char;
  600.  
  601. |   This function will repeatedly input characters using the RawCh function
  602. |   until one occuring within the string Valid is found (case independent).
  603. |   If printable, it will then be echoed using the PutCh procedure.  All
  604. |   invalid characters input will merely cause a Beep to be output.  A
  605. |   Purge will be performed when a valid key is input, which will provide
  606. |   "hot-key" support if a FOSSIL is installed.
  607.  
  608.  
  609. | function GetField(Mask: String): String;
  610.  
  611. |   This function will display the Mask in FldColour (light grey on blue)
  612. |   and then allow input of as many printable characters as the length of
  613. |   the Mask.  Attempting to input characters beyond the end of the mask
  614. |   will merely cause a Beep to be output.  Backspaces will reveal the
  615. |   underlying mask characters, and the cancel key (^X) will clear the
  616. |   entire field and redisplay the mask.  Carriage return (^M) or escape
  617. |   will terminate the field entry, restoring the original colour and
  618. |   outputting a Newline.
  619.  
  620.  
  621.   procedure Flush;
  622.  
  623. |   This procedure will flush the FOSSIL output buffer (if any) and purge
  624. |   all input buffers.  When the procedure returns, all pending output
  625. |   characters will have been sent, and any pending input characters will
  626. |   have been ignored.
  627.  
  628.  
  629.   procedure Purge;
  630.  
  631. |   This procedure will purge the FOSSIL output buffer, causing any pending
  632. |   output characters to be thrown away immediately rather than sent.
  633. |   There will be no effect at all if no FOSSIL is installed.
  634.  
  635.  
  636.  
  637.   Miscellaneous procedures
  638.   ------------------------
  639.  
  640.   procedure Pause;
  641.  
  642. |   This procedure will output '[ENTER]' in MorColour and then call Flush
  643.     and GetCh.  Once a character has been input it will erase the message.
  644.  
  645.  
  646.   procedure Delay(csecs: Word);
  647.  
  648.     This procedure will delay up to csecs centi-seconds, calling Update
  649. |   regularly to keep the timer on the status line ticking.  Local sysop
  650. |   keys will be processed during the delay.
  651.  
  652.  
  653. | procedure Colour(C: Byte);
  654.  
  655.     This procedure will change the current text colour to C unless ANSI
  656.     graphics is not available, in which case it will merely change the
  657.     current text colour to light grey on black.
  658.  
  659.  
  660. | procedure Effect(E: Effects);
  661.  
  662. |   This procedure will change the current effect (and hence colour) to one
  663. |   of the following if ANSI graphics is available:
  664.  
  665. |   Normal    (light grey on black)
  666. |   Highlight (bright foreground)
  667. |   Underline (blue foreground on colour displays, underlined on monochrome)
  668. |   Blink     (blinking foreground)
  669. |   Reverse   (black on light grey)
  670. |   Hidden    (black on black!)
  671.  
  672.  
  673.   procedure Error(Msg: String);
  674.  
  675.     This procedure will change the current text colour to ErrColour and
  676. |   display the error message string Msg on the local console.
  677.  
  678.  
  679.  
  680.   The Initialise procedure
  681.   ------------------------
  682.  
  683.   procedure Initialise(PN: String);
  684.  
  685.     This procedure is crucial.  It MUST be called before any other AvDoor
  686.     procedure or function can be used.  It may only be called once.  The
  687.     string PN must contain the name of your program (max. 8 characters).
  688.  
  689.     It will parse the command line parameters (if any), read the BBS
  690.     interface file (if requested), check for a registration key file (in
  691. |   registered copies of AvDoor!), detect and initialise the FOSSIL (if any)
  692. |   and display the copyright notice and (if necessary) a usage guide.
  693. |   For example, when the sample program below is run:
  694.  
  695. |     MYPROG - Do something clever
  696. |     Written 7 Feb 91 by Avatar of S.I.G. BBS
  697. |     Ver 0.01 Copyright (c) 1991 Serious Cybernetics
  698. |     Registered to Avatar, S.I.G.
  699.  
  700. |     Developed using AvDoor v1.10
  701.       Copyright (c) 1991 Serious Cybernetics
  702. |     Running under Desqview(tm) v2.31
  703.  
  704. |     Usage:   MYPROG {options...} {username} {options...}
  705.  
  706. |     Options: /<baud>  where <baud> = 0 for local
  707. |              /<port>  where <port> = 1 to 4
  708. |              /G<ANSI> where <ANSI> = 0 to 3
  709. |              /L<rows> where <rows> = length of user's screen (12 to 60)
  710. |              /N<line> where <line> = BBS line number (1 to 99)
  711. |              /T<time> where <time> = max time in MyProg (minutes)
  712. |              /W<name> where <name> = filename of WWIV style chain file
  713.  
  714. |              /D => read GAP style DOOR.SYS file
  715. |              /R => read RBBS style DORINFOn.DEF file
  716. |              /W => read Wildcat style CALLINFO.BBS file
  717.  
  718. |   Other command line parameters not mentioned in the usage guide are:
  719.  
  720. |     /N without a line number will set the Process variable to the
  721. |        current Desqview window number, or if not running under
  722. |        Desqview, to the number of the serial port specified (one more
  723. |        than the Port variable) which defaults to 1.
  724.  
  725. |     /R will read DORINFO1.DEF unless preceded by the /N parameter.
  726.  
  727. |     /R0 will read DOORINFO.DEF and set Process to 0 (single-tasking).
  728.  
  729. |     /R<line> will set Process to <line> and read DORINFOn.DEF where n
  730. |        is the last digit of the BBS line number, exactly the same as
  731. |        preceding the /R parameter with a /N parameter.
  732.  
  733.  
  734.  
  735.   Sample program skeleton
  736.   -----------------------
  737.  
  738.   program MyProg;
  739.  
  740.   uses AvDoor;
  741.  
  742.   begin
  743.     Author    := 'Avatar of S.I.G. BBS'; {Optional}
  744.     ProgDesc  := 'Do something clever';  {Optional}
  745.     Written   := '7 Feb 91';             {Optional}
  746.     Version   := '0.01';                 {Optional}
  747.     Initialise('MyProg');                {Essential!}
  748.     StatLine;
  749.     Colour(LtBlue);
  750.     PutLn('Check this amazingly clever program - chat mode and all!');
  751.     Pause;
  752.     UndoStat;
  753.   end.
  754.  
  755.